package com.project.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.project.bean.UserBean;
import com.project.service.IUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.ibatis.annotations.Delete;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

@RestController
@RequestMapping("user")
@Api(tags = "用户控制层")
public class UserController {
    @Autowired
    private IUserService userService;

    /**
     * 输入：账号、密码
     * 处理：
     * 1、根据账号和密码查询用户，如果查询失败，返回null，查询成功，返回登陆用户对象。
     * 2、如果登陆成功，添加登陆日志记录，同时在session中绑定登陆用户，在登陆用户中，需要绑定权限集合
     * 输出：登陆用户/null
     * 用户信息：用户编号、用户名、密码、真实姓名、权限集合
     * @param username 用户名
     * @param password 密码
     * @return 登陆用户/null
     */
    @ApiOperation(value = "登录")
    @GetMapping("login")
    public UserBean login(String username, String password, HttpServletRequest request){
        UserBean loginUser = userService.login(username, password);
        if (loginUser!=null){
            request.getSession().setAttribute("loginUser",loginUser);
        }
        return loginUser;
    }

    /**
     * 分页动态查询用户信息
     * 输入：页码，用户名
     * 处理：分页动态查询用户信息
     * 输出：分页对象
     * 用户信息：用户编号，用户名，密码，真实姓名
     * @param pageNum
     * @param userRealName
     * @return
     */
    @ApiOperation(value = "分页动态查询用户信息")
    @GetMapping("cutFindByItem")
    public IPage<UserBean> cutFindByItem(Integer pageNum, String userRealName){
        return userService.cutFindByItem(pageNum, userRealName);
    };

    /**
     * 添加用户
     * 输入：用户名，真实姓名，角色id集合
     * 处理：添加用户， 同时添加该用户拥有的角色
     * 输出：ok
     */
    @ApiOperation(value = "添加用户")
    @PostMapping("addUser")
    public String addUser(@RequestBody UserBean userBean, List<Integer> roleIdList){
        userService.addUser(userBean, roleIdList);
        return "ok";
    }

    /**
     * 删除用户
     * 输入：用户id
     * 处理：删除用户，同时删除用户拥有的角色记录
     * 输出：ok
     */
    @ApiOperation(value = "删除用户")
    @DeleteMapping("delUser")
    public String delUser(Integer userId){
        userService.delUser(userId);
        return "ok";
    };

    /**
     * 查看用户角色
     * 输入：用户Id
     * 处理：根据用户id，查询用户信息，并查询用户拥有角色集合
     * 输出：用户对象
     * 用户信息：用户ID，用户名，真实姓名，密码、角色集合
     * 角色信息：角色ID，角色名称
     * @return
     */
    @ApiOperation(value = "查看用户角色")
    @GetMapping("findRole")
    public UserBean findRole(Integer userId){
        return userService.findRole(userId);
    };

    /**
     * 根据用户id修改密码
     * 输入：用户id，新密码
     * 处理：
     * 根据用户id修改新密码
     * 输出：成功：ok    失败：no
     * @param newPassword
     * @return
     */
    @ApiOperation(value = "修改密码")
    @PutMapping("updatePassword")
    public String updatePassword(Integer userId,String newPassword){
        userService.updatePassword(userId,newPassword);
        return "ok";
    }

}
